package com.itheima.filter;

import ch.qos.logback.core.util.StringUtil;
import com.aliyuncs.utils.StringUtils;
import com.itheima.utils.JwtUtils;
import io.jsonwebtoken.Claims;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;

@WebFilter("/*")
@Slf4j
public class TokenFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        //1.获取请求url。
        String requestURI = req.getRequestURI();
        //2.判断请求url中是否包含login，如果包含，说明是登录操作，放行。
        if (requestURI.contains("login")){
            log.info("登录操作，放行...");
            chain.doFilter(request,response);
            return;
        }
//        3.获取请求头中的令牌（token）。
        String jwt = req.getHeader("token");

//        4.判断令牌是否存在，如果不存在，响应401。
        if (StringUtils.isEmpty(jwt)){
            log.info("请求头token为空，返回401");
            resp.setStatus(401);
            return;
        }
//        5.解析token，如果解析失败，响应401。
        if(jwt!= null){
            try {
                Claims claims=JwtUtils.parseJWT(jwt);
                Object id = claims.get("id");
                log.info("当前用户id为：{}",id);
            }catch (Exception e){
                log.info("令牌解析失败，返回401");
                resp.setStatus(401);
                return;
            }
        }
//        6。放行。
        log.info("令牌解析成功，放行");
        chain.doFilter(request,response);

    }
}
